package com.doit.day04

/**
 * 需求1：对10个订单的金额大小的升序排列
 * 需求2：对10个订单的金额大小的降序排列
 * 需求3：统计每一种品类下的订单总额
 * 需求4：统计每一个用户的订单总额
 * 需求5：找出每个用户金额最大的哪个订单
 * 需求6：找出每一种品类中金额最大的订单
 * 需求7：找出订单金额最大的两个订单
 * 需求8：找出订单金额最小的两个订单
 */
object _04_排序算子练习 {
  def main(args: Array[String]): Unit = {
    val list = List(
      Order("u001", "o001", "g001", "c001", 9.9, 3)
      , Order("u001", "o004", "g008", "c004", 229.9, 63)
      , Order("u006", "o006", "g006", "c005", 29.9, 45)
      , Order("u003", "o003", "g003", "c003", 129.9, 7)
      , Order("u002", "o002", "g002", "c002", 89.9, 6)
      , Order("u003", "o009", "g009", "c003", 79.9, 8)
      , Order("u004", "o004", "g004", "c004", 49.9, 13)
      , Order("u005", "o005", "g005", "c005", 59.9, 35)
      , Order("u005", "o010", "g010", "c001", 69.9, 9)
      , Order("u001", "o007", "g007", "c005", 339.9, 21)
    )
    // * 需求5：找出每个用户金额最大的哪个订单
    val groupEd: Map[String, List[Order]] = list.groupBy(_.uid)
    groupEd.map(tp=>{
      val uid: String = tp._1
      val uidOrders: List[Order] = tp._2
//      val order1: Order = uidOrders.maxBy(order => order.price * order.goods_num)
      val orders: List[Order] = uidOrders.sortBy(order => -order.price * order.goods_num).take(1)
      (uid, orders)
    }).foreach(println)





    // * 需求3：统计每一种品类下的订单总额
/*    val groupEd: Map[String, List[Order]] = list.groupBy(_.uid)

    groupEd.map(tp=>{
      val cid: String = tp._1
      val value: List[Order] = tp._2
      val sum: Double = value.map(order => order.price * order.goods_num).sum
      (cid,sum)
    }).foreach(println)*/
//    list.sortBy(order=> -order.price*order.goods_num).foreach(println)





  }

}


case class Order(uid: String, oid: String, gid: String, cid: String, price: Double, goods_num: Int)
